__author__ = 'Zhaokun'
#coding=utf-8

###############################
# Dive Into Python
# 第二章 第一个Python程序

# 例 2.1 odbchelper.py
def example_2_1():
    def buildConnectionString(params):
        '''Build a connection string from a dictionary of parameters.
Returns string.'''
        return '; '.join(['%s = %s' % (k, v) for k, v in params.items()])

    if __name__ == '__main__':
        myParams = {'server' : 'mpilgrim',
                    'database':'master',
                    'uid' : 'sa',
                    'pwd' : 'secret'
        }
        print buildConnectionString(myParams)

##### 2.2函数声明
# def buildConnectionString(params)
# Python不需要指定返回值的类型；甚至不需要指定是否有返回值。实际上，每个Python
# 函数都返回一个值；如果函数执行过return语句，它将返回指定的值，否则将返回None
# 在Python中参数params不需要指定数据类型，python会判定一个变量是什么类型，并在
# 内部将其记录下来
#
# Python与其他编程语言的比较的解释：
# 静态类型定义语言：
#   一种在编译期间数据类型固定的语言。大多数静态类型定义语言是通过要求在使用所有
# 变量之前申明它们的数据类型来保证这一点。Java和C是静态类型定义语言。
# 动态类型定义语言：
#   一种在运行期间才去确定数据类型的语言，与静态类型定义相反。VBScript和Python
# 是动态类型定义的，因为它们确定一个变量的类型是在第一次给它赋值的时候。
# 强类型定义的语言：
#   一种总是强制类型定义的语言。Java和Python是强制类型定义的。如，一个整数，如果
# 不明确地进行转换，不能把它当成一个字符串。
# 弱类型定义语言：
#   一种类型可以被忽略的语言，与强类型定义相反。VBScript是弱类型定义的。在VBScript
# 中，可以将字符串‘12’和整数‘3’进行连接得到字符串‘123’，然后可以把它看成整数
# 123，所以这些都是不需要任何的显示转换。
#   所以Python既是动态类型定义语言，又是强类型定义语言

# 例 2.4 模块导入的搜索路径
# >>>import sys
# >>>sys.path
# ['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2',
#'/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages',
# '/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle']
# >>>sys.path.append("/my/new/path")
#
# 在Python中一切都是对象，并且几乎一切都有属性和方法。万物皆是对象从感性上可以
# 解释为：一切都可以赋值给变量或作用参数传递给函数。
#
#
# if __name__ == '__main__':
# 模块是对象，并且所有的模块都有一个内置属性__name__.
# 1.如果import模块，那么__name__的值通常为模块的文件名,不带路径或者文件扩展名.
# 2.如果像一个标准的程序一样直接运行模块,则__name__的值将是一个特别的缺省值,
#   __main__.，

if __name__ == '__main__':
    example_2_1()
    